package com.chinaisafe.user.mapper;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.chinaisafe.module.user.response.SysRoleRespVO;
import com.chinaisafe.user.entity.SysUser;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import com.chinaisafe.user.vo.response.SysUserRoleRespVO;
import com.chinaisafe.user.entity.SysUserRole;

import java.util.List;

/**
 * SysUserRoleMapper
 * Description：用户角色Mapper接口
 *
 * @author xuefu.shu
 * @date 2024-07-13 16:53:56
 */
@Mapper
public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
    /**
     * 根据条件获取用户角色分页列表
     * @param page 分页对象
     * @param queryWrapper 筛选参数
     * @return IPage<SysUserRoleRespVO> 查询结果
     * @author xuefu.shu
     * @date 2024-07-13 16:53:56
     */
    IPage<SysUserRoleRespVO> getPageList(Page<SysUserRole> page, @Param(Constants.WRAPPER) QueryWrapper<SysUserRole> queryWrapper);

    /**
     * 查询用户角色列表
     *
     * @param id
     * @return List<SysRoleRespVO>
     * @author JiangZhaoYong
     * @date 2024/7/15 16:36
     */
    List<SysRoleRespVO> queryByUserId(Long id);

    /**
     * 根据角色id删除用户角色
     *
     * @param roleId
     * @author JiangZhaoYong
     * @date 2024/7/15 16:36
     */
    void deleteByRole(Long roleId);

    /**
     * 删除用户角色
     *
     * @param userId
     * @author JiangZhaoYong
     * @date 2024/7/15 16:44
     */
    void deleteByUser(Long userId);

    /**
     * 根据角色查询用户
     *
     * @param sysRoleId
     * @return List<SysUser>
     * @author tby
     * @date 2024/7/15 17:26
     */
    List<SysUser> queryByRole(Long sysRoleId);

    /**
     * 删除角色与这些用户的关系
     *
     * @param userIds
     * @param roleId
     * @author tby
     * @date 2024/7/16 13:56
     */
    void deleteByRoleUser(@Param("userIds") List<Long> userIds, @Param("roleId") Long roleId);
}
